# CodePress Boilerplate
This is a boilerplate for using Docker to develop WordPress sites locally and then deploy to shared hosting. This isn't a fun procedure, so this project exists to mitigate some of the pain.

## Local development

### 1. Install Docker
```
$ wget -nv -O - https://get.docker.com/ | sh
```
Once installed, you will need to add yourself to the `docker` group on your computer. Replace `myname` with your username below.
```
$ sudo usermod -aG docker myname
```
Finally, log out of and back into your computer (or reboot it).

If this doesn't work, you can follow [the tutorial](https://docs.docker.com/engine/installation/linux/) to install Docker. This project assumes you're using a Linux workstation.

### 2. Start the containers
```
$ make start
```
You can now see the WordPress install screen at `localhost:8000`

### 3. Authenticate
You need a file called `.env` in the root of your project containing the necessary credentials for pulling and pushing to the server. There is an example file called `env-example` for reference.

## Contributing
Make sure you are authenticated with a `.env` file before trying any of this.

### Strategy
1. Get things working locally, then push any relevant code to master
2. Deploy the code to the server
3. Log into the deployed site and configure the back-end as needed
4. Pull the database back locally

This does require doing things in the dashboard twice. It's tedious, but probably also the best way currently available for WordPress.

### Sync with the server
You can use the provided Makefile to automate some tasks.

#### `make deploy`
Logs in via FTP and uploads only the relevant files to the server.

#### `make pulldb`
Connects to the remote MySQL database, dumps it, and pulls it into your local Docker container.

## Docker tips

Stop the container:
```
$ docker stop mysite
```

Start the container:
```
$ docker start mysite
```

List all active containers:
```
$ docker ps
```

List all active AND stopped containers:
```
$ docker ps -a
```

Shell into a container:
```
$ docker exec -it mysite /bin/bash
```

Remove a container:
```
$ docker stop mysite
$ docker rm mysite
```

Get all information imaginable about a container:
```
$ docker inspect mysite
```
